草庐IT

c++ - C++中static的含义

全部标签

c++ - SFINAE:static_assert 与 std::enable_if

以下(建议!)语法有什么缺点吗?templatevoidf()static_assert(std::is_same::value){;}而不是SFINAE(看起来像拐杖):template::value>::type>voidf(){;}甚至更糟:templatetypenamestd::enable_if::value>::typef(){;}其中禁止使用auto推导结果类型。 最佳答案 首先,它们是不同的,特别是它们不是同时检查的。关键的区别在于它们在重载解析方面的应用。SFINAE将从重载集中剔除函数,以便选择另一个函数(如果

c++ - SFINAE:static_assert 与 std::enable_if

以下(建议!)语法有什么缺点吗?templatevoidf()static_assert(std::is_same::value){;}而不是SFINAE(看起来像拐杖):template::value>::type>voidf(){;}甚至更糟:templatetypenamestd::enable_if::value>::typef(){;}其中禁止使用auto推导结果类型。 最佳答案 首先,它们是不同的,特别是它们不是同时检查的。关键的区别在于它们在重载解析方面的应用。SFINAE将从重载集中剔除函数,以便选择另一个函数(如果

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - OpenCV中七个胡不变矩函数的含义

我理解七个hu不变矩是针对物体的平移、旋转和尺度变化,以便独立识别物体这些因素。这就是为什么我使用OpenCV中的“矩”函数来提取中心矩,然后我使用函数HuMoments来获取以下二值化图像的七个不变矩:我的第一个问题是关于使用OpenCV中的“时刻”功能。第二个参数是“binaryImage”,我设置为true,因为是二值图,可以吗?我的第二个疑问是关于函数“HuMoments”的输出:七个hu不变矩。我不明白这个数据。哪些数据与旋转有关,哪些用于平移,哪些用于比例变化?非常感谢!干杯! 最佳答案 第一个问题:这样做是可以的,因为

c++ - OpenCV中七个胡不变矩函数的含义

我理解七个hu不变矩是针对物体的平移、旋转和尺度变化,以便独立识别物体这些因素。这就是为什么我使用OpenCV中的“矩”函数来提取中心矩,然后我使用函数HuMoments来获取以下二值化图像的七个不变矩:我的第一个问题是关于使用OpenCV中的“时刻”功能。第二个参数是“binaryImage”,我设置为true,因为是二值图,可以吗?我的第二个疑问是关于函数“HuMoments”的输出:七个hu不变矩。我不明白这个数据。哪些数据与旋转有关,哪些用于平移,哪些用于比例变化?非常感谢!干杯! 最佳答案 第一个问题:这样做是可以的,因为

c++ - 如何将static_assert与sizeof和stringify结合起来?

内存使用在我的应用程序中非常重要。因此,我有特定的断言,在编译时检查内存大小,如果大小与我们之前认为正确的大小不同,则给出static_assert。我已经定义了一个这样的宏:#defineCHECKMEM(mytype,size)static_assert((sizeof(objectType)==size)),"Sizeincorrectfor"#mytype"!");这个宏可以很容易地写出来:CHECKMEM(Book,144);CHECKMEM(Library,80);问题在于,当这个static_assert关闭时,可能很难找出新的大小应该是多少(例如,通过使用隐藏的编译器选

c++ - 如何将static_assert与sizeof和stringify结合起来?

内存使用在我的应用程序中非常重要。因此,我有特定的断言,在编译时检查内存大小,如果大小与我们之前认为正确的大小不同,则给出static_assert。我已经定义了一个这样的宏:#defineCHECKMEM(mytype,size)static_assert((sizeof(objectType)==size)),"Sizeincorrectfor"#mytype"!");这个宏可以很容易地写出来:CHECKMEM(Book,144);CHECKMEM(Library,80);问题在于,当这个static_assert关闭时,可能很难找出新的大小应该是多少(例如,通过使用隐藏的编译器选